{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 问题描述\n",
    "\n",
    "请在Pima Indians Diabetes Data Set（皮马印第安人糖尿病数据集）进行分类器练习。\n",
    "\n",
    "# 批改标准\n",
    "\n",
    "1) 训练数据和测试数据分割（随机选择20%的数据作为测试集）；（10分）\n",
    "2) 适当的特征工程（及数据探索）;（10分）\n",
    "3) Logistic回归，并选择最佳的正则函数（L1/L2）及正则参数；（30分）\n",
    "4) 线性SVM，并选择最佳正则参数，比较与Logistic回归的性能，简单说明原因。（20分）\n",
    "5) RBF核的SVM，并选择最佳的超参数（正则参数、RBF核函数宽度）；（30分）\n",
    "\n",
    "# 数据说明：\n",
    "\n",
    "原始数据集地址：https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes\n",
    "数据集只有一个文件（diabetes.csv）：Pima Indians Diabetes Dataset 包括根据医疗\n",
    "记录的比马印第安人 5 年内糖尿病的发病情况，这是一个两类分类问题。每个类的\n",
    "样本数目数量不均等。一共有 768 个样本，每个样本有 8 个输入变量和 1 个输出\n",
    "变量。缺失值通常用零值编码。\n",
    "1) 字段说明\n",
    "Pregnancies： 怀孕次数\n",
    "Glucose： 口服葡萄糖耐受试验中，2 小时的血浆葡萄糖浓度。\n",
    "BloodPressure： 舒张压（mm Hg）\n",
    "SkinThickness： 三头肌皮肤褶层厚度（mm）\n",
    "Insulin：2 小时血清胰岛素含量（μU/ ml）\n",
    "BMI： 体重指数（体重，kg /（身高，m）^ 2）\n",
    "2) DiabetesPedigreeFunction： 糖尿病家族史\n",
    "3) Age： 年龄（岁）\n",
    "Outcome： 输出变了/类别标签（0 或 1，出现糖尿病为 1, 否则为 0）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 三，logistic回归，并选择最佳正则函数，及正则参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 导入必要工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np \n",
    "import pandas as pd \n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取特征工程后的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>7.680000e+02</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>2.544261e-17</td>\n",
       "      <td>-3.324887e-16</td>\n",
       "      <td>6.662784e-16</td>\n",
       "      <td>7.071889e-16</td>\n",
       "      <td>-2.369381e-16</td>\n",
       "      <td>3.628463e-16</td>\n",
       "      <td>2.422108e-16</td>\n",
       "      <td>1.528002e-16</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>1.000652e+00</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-1.141852e+00</td>\n",
       "      <td>-2.554131e+00</td>\n",
       "      <td>-4.004245e+00</td>\n",
       "      <td>-2.521670e+00</td>\n",
       "      <td>-1.665945e+00</td>\n",
       "      <td>-2.075119e+00</td>\n",
       "      <td>-1.189553e+00</td>\n",
       "      <td>-1.041549e+00</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-8.448851e-01</td>\n",
       "      <td>-7.212214e-01</td>\n",
       "      <td>-6.953060e-01</td>\n",
       "      <td>-4.727737e-01</td>\n",
       "      <td>-4.007289e-01</td>\n",
       "      <td>-7.215397e-01</td>\n",
       "      <td>-6.889685e-01</td>\n",
       "      <td>-7.862862e-01</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-2.509521e-01</td>\n",
       "      <td>-1.540881e-01</td>\n",
       "      <td>-1.675912e-02</td>\n",
       "      <td>8.087936e-16</td>\n",
       "      <td>-3.345079e-16</td>\n",
       "      <td>-8.363615e-03</td>\n",
       "      <td>-3.001282e-01</td>\n",
       "      <td>-3.608474e-01</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.399473e-01</td>\n",
       "      <td>6.103090e-01</td>\n",
       "      <td>6.282695e-01</td>\n",
       "      <td>3.240194e-01</td>\n",
       "      <td>-3.345079e-16</td>\n",
       "      <td>6.029301e-01</td>\n",
       "      <td>4.662269e-01</td>\n",
       "      <td>6.602056e-01</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3.906578e+00</td>\n",
       "      <td>2.541850e+00</td>\n",
       "      <td>4.102655e+00</td>\n",
       "      <td>7.950467e+00</td>\n",
       "      <td>8.126238e+00</td>\n",
       "      <td>5.042087e+00</td>\n",
       "      <td>5.883565e+00</td>\n",
       "      <td>4.063716e+00</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Pregnancies       Glucose  BloodPressure  SkinThickness       Insulin  \\\n",
       "count  7.680000e+02  7.680000e+02   7.680000e+02   7.680000e+02  7.680000e+02   \n",
       "mean   2.544261e-17 -3.324887e-16   6.662784e-16   7.071889e-16 -2.369381e-16   \n",
       "std    1.000652e+00  1.000652e+00   1.000652e+00   1.000652e+00  1.000652e+00   \n",
       "min   -1.141852e+00 -2.554131e+00  -4.004245e+00  -2.521670e+00 -1.665945e+00   \n",
       "25%   -8.448851e-01 -7.212214e-01  -6.953060e-01  -4.727737e-01 -4.007289e-01   \n",
       "50%   -2.509521e-01 -1.540881e-01  -1.675912e-02   8.087936e-16 -3.345079e-16   \n",
       "75%    6.399473e-01  6.103090e-01   6.282695e-01   3.240194e-01 -3.345079e-16   \n",
       "max    3.906578e+00  2.541850e+00   4.102655e+00   7.950467e+00  8.126238e+00   \n",
       "\n",
       "                BMI  DiabetesPedigreeFunction           Age     Outcome  \n",
       "count  7.680000e+02              7.680000e+02  7.680000e+02  768.000000  \n",
       "mean   3.628463e-16              2.422108e-16  1.528002e-16    0.348958  \n",
       "std    1.000652e+00              1.000652e+00  1.000652e+00    0.476951  \n",
       "min   -2.075119e+00             -1.189553e+00 -1.041549e+00    0.000000  \n",
       "25%   -7.215397e-01             -6.889685e-01 -7.862862e-01    0.000000  \n",
       "50%   -8.363615e-03             -3.001282e-01 -3.608474e-01    0.000000  \n",
       "75%    6.029301e-01              4.662269e-01  6.602056e-01    1.000000  \n",
       "max    5.042087e+00              5.883565e+00  4.063716e+00    1.000000  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"FE_diabetes.csv\")\n",
    "\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 训练数据和测试数据分割"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>614.000000</td>\n",
       "      <td>614.000000</td>\n",
       "      <td>614.000000</td>\n",
       "      <td>6.140000e+02</td>\n",
       "      <td>6.140000e+02</td>\n",
       "      <td>614.000000</td>\n",
       "      <td>614.000000</td>\n",
       "      <td>614.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-0.005737</td>\n",
       "      <td>-0.013526</td>\n",
       "      <td>-0.022209</td>\n",
       "      <td>-2.198394e-02</td>\n",
       "      <td>-9.128772e-03</td>\n",
       "      <td>0.000960</td>\n",
       "      <td>0.004304</td>\n",
       "      <td>-0.012459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.011826</td>\n",
       "      <td>0.996816</td>\n",
       "      <td>0.999417</td>\n",
       "      <td>9.672943e-01</td>\n",
       "      <td>9.857543e-01</td>\n",
       "      <td>0.995640</td>\n",
       "      <td>1.009540</td>\n",
       "      <td>0.986092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-1.141852</td>\n",
       "      <td>-2.554131</td>\n",
       "      <td>-4.004245</td>\n",
       "      <td>-2.521670e+00</td>\n",
       "      <td>-1.665945e+00</td>\n",
       "      <td>-2.075119</td>\n",
       "      <td>-1.189553</td>\n",
       "      <td>-1.041549</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-0.737660</td>\n",
       "      <td>-0.695306</td>\n",
       "      <td>-4.727737e-01</td>\n",
       "      <td>-4.124983e-01</td>\n",
       "      <td>-0.717901</td>\n",
       "      <td>-0.690479</td>\n",
       "      <td>-0.786286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-0.250952</td>\n",
       "      <td>-0.154088</td>\n",
       "      <td>-0.033518</td>\n",
       "      <td>8.087936e-16</td>\n",
       "      <td>-3.345079e-16</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.321269</td>\n",
       "      <td>-0.360847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.639947</td>\n",
       "      <td>0.602090</td>\n",
       "      <td>0.628269</td>\n",
       "      <td>3.240194e-01</td>\n",
       "      <td>-3.345079e-16</td>\n",
       "      <td>0.570182</td>\n",
       "      <td>0.479817</td>\n",
       "      <td>0.575118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3.906578</td>\n",
       "      <td>2.541850</td>\n",
       "      <td>3.440867</td>\n",
       "      <td>3.852674e+00</td>\n",
       "      <td>8.126238e+00</td>\n",
       "      <td>5.042087</td>\n",
       "      <td>5.883565</td>\n",
       "      <td>4.063716</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness       Insulin  \\\n",
       "count   614.000000  614.000000     614.000000   6.140000e+02  6.140000e+02   \n",
       "mean     -0.005737   -0.013526      -0.022209  -2.198394e-02 -9.128772e-03   \n",
       "std       1.011826    0.996816       0.999417   9.672943e-01  9.857543e-01   \n",
       "min      -1.141852   -2.554131      -4.004245  -2.521670e+00 -1.665945e+00   \n",
       "25%      -0.844885   -0.737660      -0.695306  -4.727737e-01 -4.124983e-01   \n",
       "50%      -0.250952   -0.154088      -0.033518   8.087936e-16 -3.345079e-16   \n",
       "75%       0.639947    0.602090       0.628269   3.240194e-01 -3.345079e-16   \n",
       "max       3.906578    2.541850       3.440867   3.852674e+00  8.126238e+00   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age  \n",
       "count  614.000000                614.000000  614.000000  \n",
       "mean     0.000960                  0.004304   -0.012459  \n",
       "std      0.995640                  1.009540    0.986092  \n",
       "min     -2.075119                 -1.189553   -1.041549  \n",
       "25%     -0.717901                 -0.690479   -0.786286  \n",
       "50%      0.000000                 -0.321269   -0.360847  \n",
       "75%      0.570182                  0.479817    0.575118  \n",
       "max      5.042087                  5.883565    4.063716  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X = data.drop(['Outcome'],axis = 1)\n",
    "y = data['Outcome']\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=12)\n",
    "\n",
    "X_train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 训练Logistic函数模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score is: 0.8051948051948052\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "lr= LogisticRegression()\n",
    "lr.fit(X_train,y_train)\n",
    "score = lr.score(X_test,y_test)\n",
    "# score = lr.score(X_train,y_train)\n",
    "arr = np.array(X_train.columns.values)\n",
    "lrcoefs = sum(lr.coef_.tolist(),[])\n",
    "coefs = pd.Series(lrcoefs,index = arr)\n",
    "imp_coefs = coefs.sort_values()\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the LR model\")\n",
    "plt.show()\n",
    "\n",
    "print(\"score is:\" , score)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用GridSearchCV进行最优正则函数，最优正则参数查询"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7671009771986971\n",
      "{'C': 0.1, 'penalty': 'l2'}\n",
      "0.7027276228470217\n",
      "{'C': 0.155, 'penalty': 'l1'}\n",
      "0.7671009771986971\n",
      "{'C': 0.1, 'penalty': 'l2'}\n",
      "0.6197641877322567\n",
      "{'C': 0.001, 'penalty': 'l2'}\n",
      "-0.48581449933470916\n",
      "{'C': 0.3, 'penalty': 'l2'}\n",
      "0.7654723127035831\n",
      "{'C': 0.15, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "parameters = {'penalty':['l1','l2'], 'C':[0.001, 0.01, 0.1,0.15,0.153,0.155,0.16,0.17,0.18,0.19,0.2,0.21,0.25,0.3, 1, 10, 100, 1000]}\n",
    "# clf.estimator.get_params().keys()\n",
    "\n",
    "clf = GridSearchCV(lr,parameters,scoring = 'accuracy')\n",
    "clf.fit(X_train,y_train)\n",
    "print(clf.best_score_)\n",
    "print(clf.best_params_)\n",
    "\n",
    "clf = GridSearchCV(lr,parameters,scoring = 'average_precision')\n",
    "clf.fit(X_train,y_train)\n",
    "print(clf.best_score_)\n",
    "print(clf.best_params_)\n",
    "\n",
    "clf = GridSearchCV(lr,parameters,scoring = 'f1_micro')\n",
    "clf.fit(X_train,y_train)\n",
    "print(clf.best_score_)\n",
    "print(clf.best_params_)\n",
    "\n",
    "clf = GridSearchCV(lr,parameters,scoring = 'recall')\n",
    "clf.fit(X_train,y_train)\n",
    "print(clf.best_score_)\n",
    "print(clf.best_params_)\n",
    "\n",
    "clf = GridSearchCV(lr,parameters,scoring = 'neg_log_loss')\n",
    "clf.fit(X_train,y_train)\n",
    "print(clf.best_score_)\n",
    "print(clf.best_params_)\n",
    "\n",
    "clf = GridSearchCV(lr,parameters,cv=5,return_train_score=True)\n",
    "clf.fit(X_train,y_train)\n",
    "print(clf.best_score_)\n",
    "print(clf.best_params_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用最优参数进行logisticRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score is: 0.8116883116883117\n"
     ]
    }
   ],
   "source": [
    "lr2= LogisticRegression(penalty = 'l1',C = 0.155)\n",
    "lr2.fit(X_train,y_train)\n",
    "score2 = lr2.score(X_test,y_test)\n",
    "# score2 = lr2.score(X_train,y_train)\n",
    "arr = np.array(X_train.columns.values)\n",
    "lrcoefs = sum(lr2.coef_.tolist(),[])\n",
    "coefs = pd.Series(lrcoefs,index = arr)\n",
    "imp_coefs = coefs.sort_values()\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the LR model\")\n",
    "plt.show()\n",
    "\n",
    "print(\"score is:\" , score2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1,0.15,0.153,0.155,0.16,0.17,0.18,0.19,0.2,0.21,0.25,0.3, 1, 10, 100, 1000]\n",
    "\n",
    "# plot CV误差曲线\n",
    "test_means = -clf.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = clf.cv_results_[ 'std_test_score' ]\n",
    "train_means = -clf.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = clf.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores =  np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    plt.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    plt.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'logloss' )\n",
    "plt.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 四，线性SVM，并选择最佳正则参数，比较与Logistic回归的性能，简单说明原因"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "score is: 0.7654723127035831\n",
      "{'C': 10}\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "param_grid = {'C': Cs}\n",
    "grid = GridSearchCV(SVC(kernel='linear'), param_grid, cv=5)\n",
    "\n",
    "grid.fit(X_train, y_train)\n",
    "score3 = grid.best_score_\n",
    "\n",
    "print(\"score is:\" , score3)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 根据模型的得分，Logistic在测试集的得分是0.8116883116883117 svm的得分是0.7654723127035831\n",
    "### 因此Logistic模型的性能更优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 五， RBF核的SVM，并选择最佳的超参数（正则参数、RBF核函数宽度）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7654723127035831\n",
      "{'C': 10, 'gamma': 0.01}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "gammas = [0.0001,0.001, 0.01, 0.1, 1]\n",
    "param_grid = {'C': Cs, 'gamma' : gammas}\n",
    "grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=5)\n",
    "\n",
    "grid.fit(X_train, y_train)\n",
    "print(grid.best_score_)\n",
    "print(grid.best_params_)\n",
    "\n",
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_gamms = len(gammas)\n",
    "\n",
    "test_scores =  np.array(test_means).reshape(n_Cs,number_gamms)\n",
    "#train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_gamms)\n",
    "#train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(gammas):\n",
    "    plt.plot(x_axis, test_scores[:,i], label= gammas[i])\n",
    "    #pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = gammas[i] )\n",
    "    #pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'accuary' )\n",
    "plt.savefig('SVMGridSearchCV_C.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最佳参数为C ：10 gamma : 0.01"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
